#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<sys/shm.h>

#define SHM_KEY 0x12345678
int main()
{
  //创建一块共享内存,打开成功返回操作句柄，失败返回-1
  int shmid=shmget(SHM_KEY,4096,IPC_CREAT|0664);
  if(shmid<0)
  {
    perror("shmget error");
    return -1;
  }

  //映射共享内存到当前进程的虚拟地址空间
  void *start=shmat(shmid,NULL,0);   //0表示可读可写
  if(start==(void*)-1)
  {
    perror("shmat error");
    return -1;
  }
  int count=0;
  while(1)
  {
    //从共享内存中读出数据，但不会删除共享内存中的数据，共享内存不会随着进程的结束而被删除
    sprintf(start,"I am process A +%d\n",count++);
    sleep(1);
  }
  //解除映射关系
  shmdt(start);
  //删除共享内存
  shmctl(shmid,IPC_RMID,NULL);
  return 0;
}
